package app

import "encoding/xml"

// OrderRequest 订单请求结构体
type OrderRequest struct {
	Body       string `json:"body"`
	TotalFee   int    `json:"total_fee"`    // 支付金额（单位：分）
	OutTradeNo string `json:"out_trade_no"` // 订单号
	OpenID     string `json:"open_id"`
}

// UnifiedOrderResponse 订单支付 返回参数
type UnifiedOrderResponse struct {
	XMLName    xml.Name `xml:"xml"`
	ReturnCode string   `xml:"return_code"`
	ReturnMsg  string   `xml:"return_msg"`
	ResultCode string   `xml:"result_code"`
	ErrCode    string   `xml:"err_code"`     // 新增错误码字段
	ErrCodeDes string   `xml:"err_code_des"` // 新增错误描述字段
	AppID      string   `xml:"appid"`
	MchID      string   `xml:"mch_id"`
	NonceStr   string   `xml:"nonce_str"`
	Sign       string   `xml:"sign"`
	PrepayID   string   `xml:"prepay_id"`
	CodeURL    string   `xml:"code_url"`
}

// PaymentNotification 支付通知结构体
type PaymentNotification struct {
	AppID         string `xml:"appid" json:"appid"`
	MchID         string `xml:"mch_id" json:"mch_id"`
	NonceStr      string `xml:"nonce_str" json:"nonce_str"`
	Sign          string `xml:"sign" json:"sign"`
	ResultCode    string `xml:"result_code" json:"result_code"`
	ReturnCode    string `xml:"return_code" json:"return_code"`
	Openid        string `xml:"openid" json:"openid"`
	TransactionID string `xml:"transaction_id" json:"transaction_id"`
	OutTradeNo    string `xml:"out_trade_no" json:"out_trade_no"`
	TotalFee      string `xml:"total_fee" json:"total_fee"`
	FeeType       string `xml:"fee_type" json:"fee_type"`
	TimeEnd       string `xml:"time_end" json:"time_end"`
	BankType      string `xml:"bank_type" json:"bank_type"`
	CashFee       string `xml:"cash_fee" json:"cash_fee"`
	IsSubscribe   string `xml:"is_subscribe" json:"is_subscribe"`
	TradeType     string `xml:"trade_type" json:"trade_type"`
}

// PaymentResponse 结构体表示支付响应
type PaymentResponse struct {
	MchID          string `json:"mchid"`
	AppID          string `json:"appid"`
	OutTradeNo     string `json:"out_trade_no"`
	TransactionID  string `json:"transaction_id"`
	TradeType      string `json:"trade_type"`
	TradeState     string `json:"trade_state"`
	TradeStateDesc string `json:"trade_state_desc"`
	BankType       string `json:"bank_type"`
	Attach         string `json:"attach"`
	SuccessTime    string `json:"success_time"`
	Payer          Payer  `json:"payer"`
	Amount         Amount `json:"amount"`
}

// Payer 结构体表示支付者信息
type Payer struct {
	OpenID string `json:"openid"`
}

// Amount 结构体表示金额信息
type Amount struct {
	Total         int    `json:"total"`
	PayerTotal    int    `json:"payer_total"`
	Currency      string `json:"currency"`
	PayerCurrency string `json:"payer_currency"`
}

// Resource 结构体表示嵌套的资源信息
type Resource struct {
	OriginalType   string `json:"original_type"`
	Algorithm      string `json:"algorithm"`
	Ciphertext     string `json:"ciphertext"`
	AssociatedData string `json:"associated_data"`
	Nonce          string `json:"nonce"`
}

type PaymentEncryptNotification struct {
	ID           string   `json:"id"`
	CreateTime   string   `json:"create_time"`
	ResourceType string   `json:"resource_type"`
	EventType    string   `json:"event_type"`
	Summary      string   `json:"summary"`
	Resource     Resource `json:"resource"`
}
